﻿// 802 树的直径.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <vector>


using  namespace std;
/*
http://oj.daimayuan.top/course/7/problem/528
给你一棵 n
 个节点的树（节点的编号为 1
 到 n
），请求出这棵树的直径的长度。

输入格式
第一行一个整数 n
 表示节点数。

接下来 n−1
 行，每行两个整数 x,y
 表示 x
 号节点和 y
 号节点之间有一条边。

输入保证是一棵树。

输出格式
输出一行一个整数表示直径的长度。

样例输入
4
1 2
1 3
3 4
样例输出
3
数据规模
对于所有数据，保证 1≤n≤106,1≤x,y≤n
*/
int n, pre[100001], l, front = 1, rear = 0, dist[100001];
vector<int> edges[100001];

void dfs(int x) {
	for(auto y:edges[x])
		if (y != pre[x]) {
			pre[y] = x;
			dist[y] = dist[x] + 1;
			dfs(y);
		}
}

int main()
{
	scanf("%d",&n);
	for (int i = 1; i < n; i++) {
		int x, y;
		scanf("%d%d",&x,&y);
		edges[x].push_back(y);
		edges[y].push_back(x);
	}
	memset(dist,0,sizeof dist);
	memset(pre,0,sizeof pre);
	pre[1] = -1; 
	dfs(1);
	int idx = 0, v = 0;
	for (int i = 1; i <= n; i++) {
		if (dist[i] > v)
			v = dist[i], idx = i;
	}

	memset(dist,0,sizeof dist);
	memset(pre,0,sizeof pre);
	pre[idx] = -1;
	dfs(idx);

	v = 0;
	for (int i = 1; i <= n; i++) {
		v = max(v,dist[i]);
	}
	printf("%d\n",v);


	return  0;
}

 